<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
      
        function extend(z_obj,f_obj){
            z_obj.prototype=Object.create(f_obj.prototype);
            Object.defineProperty(z_obj.prototype,"constructor",{
                value:z_obj,
                Enumerator:false
            })
        }
        //mixin 混合功能 ，让一个对象功能给别人使用，不是原型的继承
        //原型的继承太长的话。虽然没有什么问题，但是会导致关系混乱
        function Admin(name,age){
            this.name=name;
            this.age=age;           
        }


        Admin.prototype.show=function(){
            console.log(this.name,this.age);
        };
        
        //地址对象
        let Adress={
         
            getAdress(){
               return this.name+"..."+"地址访问...";
            }

        //积分统计
        let JiFen={
            __proto__:Adress,//对象
            getjifen(){
                console.log(super.getAdress()+"..."+"积分统计...");
                //super访问的是对象原型的：就是Adress
            }
        }


        //如果只想继承Admin，不想继承其他的对象的原型，但是又想使用那些方法？？(原型也是对象),
        //把地址 积分 加到原型中就行
      

        //对象加入到user.prototype中
        

        function user(name,age){
           Admin.call(this,name,age);
        }

        extend(user,Admin);
        user.prototype=Object.assign(user.prototype,Adress,JiFen);//一定要把自己的对象压进去，否则没有构造器
        //new 
        let tw =new user("唐玮",22);
         console.log(user.prototype);
        tw.show();//唐玮 22
      console.log(  tw.getAdress());;//唐玮...地址访问...
        tw.getjifen();//唐玮...积分统计...
       


    </script>
</body>
</html>